iT邦幫忙

2024 iThome 鐵人賽

DAY 6
1
Python

從概念到應用:Python實戰開發學習之旅系列 第 6

[Day5] 複習流程控制 - if else 的思路 跟 軟體設計流程分享

  • 分享至 

  • xImage
  •  

今日目標

重點1 複習一下流程控制的概念
把上次的最後的成績作業絲路拆解完,最後一個環節的成績程式實作。
如果還沒有看過流程控制的同學
可以先跳回day4
day4 流程控制

重點2小技巧
今天會說明
除了我的第一種思路外?還有沒有別的思考模式~!!
那麼寫第二種或是第三種寫法,有什麼優缺點跟探討的議題!?

重點3軟體開發流程
今天也會給大家滿滿乾貨
之所以會放到這邊說也是因為
流程控制有概念後~
我們當然要對自己設計的
軟體設計週期有所概念

這邊先簡介
1.需求收集:確保了解客戶的需求。
2.分析需求:轉換需求為系統功能和業務邏輯。
3.設計解決方案:定義技術結構。
4.實作:將設計轉化為代碼。
5.測試:驗證系統的正確性。
6.部屬:系統發布到生產環境。

讓我們繼續看下去吧~!/images/emoticon/emoticon30.gif

Part1 流程控制的review - 成績range計算系統

Step 1. 先拆解我們的流程圖
https://ithelp.ithome.com.tw/upload/images/20240920/20121052qkRp1vSZUu.png

首先我們程式設計前最先應該是要先定義需求
這個例子便是學校可能會用到的系統設計

依照老師的需求會先分類1.及格還有2.不及格

1.及格又可以分成
1.1 Grade A 非常棒
1.2 Gade B 很好
2.不及格可以分成
2.1 Grade C 雖然不及格但有補考/補修標準!
2.2 Grade D 不及格而且你要重新上課了!

step2 程式碼實作

score = int(input("Enter your score: "))

if score >= 60:
    if score >= 90:
        print("Grade: A")
    else:
        print("Grade: B")
else:
    if score >= 40:
        print("Grade: C")
    else:
        print("Grade: F")

經過一翻拆解程式碼就出來了~!
是不是很有意思呢

補充 input()這個好用的功能可以讓我們使用者跟程式互動
大家可以開命令提示字元或用script 模式執行後,在 score : 的冒號直接打出數字
看程式結果,如下

https://ithelp.ithome.com.tw/upload/images/20240920/20121052JZf8trMMbw.png

思考一下~
這邊可以看到程式輸入數字都準確無誤的執行
但唯獨最後輸入 "九十" 這個中文字串就失敗了!!

聰明的你應該知道了
這跟我們前面學習到的型別以及運算有關
首先我們在做數字進行的比較運算一定要雙方都是數字才行呢! (某些程式語言例外)

尤其是如果你輸入字串或是程式碼看不懂的中文
他就會無法進行比較而造成錯誤呢!!

這就好比你拿錯誤的語法
來說別人國家的語言!? 可能會造成意思上的誤解喔~!!

Step3 可以改寫嗎?

聰明的各位應該想到了
上述的程式我們也可以改成

score = int(input("Enter your score: "))

if score >= 90:
    print("Grade: A")
elif score >= 60:
    print("Grade: B")
elif score >= 40:
    print("Grade: C")
else:
    print("Grade: F")

原因是因為我們其實如果沒有需要特別print(及格或不及格)=> 這個可以讓大家思考
如果我今天的程式是希望在60及格與否的條件下撰寫。那麼第一種寫法可能是比較好的,因為你有可能會在及格的情況下:
1.發送通知給學生獎狀
2.呼叫別隻程式,例如寄信!?
3.傳到通訊軟體,告訴學生及格

如果不及格可能會:
1.通知需要補考或補修
2.落榜通知!?
3.紀錄學生學習不良原因

這種情況下就很有意思~
我們的程式可以根據需求來進行設計

但如果並非處理這麼複雜的分類或呼叫
這個指令的話我們照順序邏輯比較下來也是可以的
比如說老師目的只想在成績單上印英文字母(A、B、C、F這些)

重點說明
崁套的判斷會由外層執行優先

如果是用if-else的模式:在執行內層 。若外層第一層執行完畢不會執行第二層

分享笑話
這個是網路上工程師的笑話,大家在學完流程控制之後就會明白他的笑點在哪了
/images/emoticon/emoticon24.gif

老婆:"下班後買十個包子回來,如果看到賣西瓜的就買一個。"
老公:"好。" (下班後帶著一個包子回家)
老婆:"為什麼只有一個包子?"
老公:"因為我看到賣西瓜的。"

Part2 行程表決定系統

看完了成績系統外
我再帶一個範例讓大家看看

小技巧 - 在完整的程式開發流程可以分為需求->分析->設計->實作->測試->部屬

https://ithelp.ithome.com.tw/upload/images/20240920/20121052Vhgcqn641z.png

步驟1 需求 (Requirement): 了解客戶或用戶的需求,定義系統應具備的功能與特性。
步驟2 分析 (Analysis): 分析需求,確定系統的架構與業務邏輯,評估系統的可行性。
步驟3 設計 (Design): 創建系統的技術設計,包含選擇技術棧、架構設計、數據庫設計等。
步驟4 實作 (Implementation): 根據設計文檔進行程式編寫,將設計轉化為具體的代碼。
步驟5 測試 (Testing): 驗證系統的正確性,進行各種測試如單元測試和集成測試,找出並修復缺陷。
步驟5 部屬 (Deployment): 將軟體部署到生產環境,確保其在實際環境中的正常運行。

雖然這篇是入門文章
不過設計流程可以記在心裡去思考喔~!!

接下來我們就來按照這六個步驟實現這個作品看看

Step 1. 定義需求

這個目的是要跟使用者討論
我們需要使用到這個系統需求是什麼?
要解決什麼目的?

那們設想的需求就是

  1. 當如果天氣是雨天就在家裡做事
  2. 如果是晴天就出去玩~

Step 2. 分析

經過我們跟user討論
我們可以看到主要需求有這兩個

這時候就可以再思考
是否會有白天或晚上的考量~

比如說:

  1. 我白天精力充沛喜歡做家事,晚上我只想耍費~看書/看netflix
  2. 晚上如果天氣好想看星星嗎?

好的那們經過一翻跟user的龍爭虎鬥之後
我們的需求分析大概會是

  1. 分成下雨天跟沒下雨的情境
  2. 根據1.的天氣狀況再來分成白天跟晚上的動作
  3. 如果是天起好就盡量排出去完的行程,如果是白天我就坐有精力的活動,如果是晚上我就耍費看電影

/images/emoticon/emoticon01.gif

到了這個環節
聰明小夥伴應該就明白了~
這邊就是我們前面學的流程圖用意
我們根據上面的需求
把流程圖畫出來吧!!
https://ithelp.ithome.com.tw/upload/images/20240920/20121052C0jM5CqPd3.png

Step 3. 設計

通常這個階段
我們都會定義

  • UI/UX設計: 我的程式樣貌或是介面要長什麼樣子? 使用者會怎麼操作,體驗會不會好?
  • 程式碼架構: 如果是網頁前端工程師會思考組件怎麼設計、後端工程師會考量API的權限或路由
  • 資料庫定義: 這些資料再進資料庫要什麼型態?要保存多久?需不需要切割?備援?

不過這邊讓大家有個概念就好
我們先跳過XDD

補充通常大規模的公司前三步驟主要會由PM及UI/UX設計師來討論,後面3步驟會由軟體工程師實踐

Step 4.實作

我們根據上面的敘述把程式寫出來吧

weather = input("Is it raining? (yes/no): ")
time_of_day = input("Is it day or night?: ")

if weather == "no":
    if time_of_day == "day":
        print("You can go for a walk.")
    else:
        print("You can watch the stars.")
else:
    if time_of_day == "day":
        print("You can read a book at home.")
    else:
        print("You can watch a movie at home.")

Step 5.測試

這個環節通常會由
QA工程師(Quality Assurance Engineer)
來測試你寫的程式對不對

https://ithelp.ithome.com.tw/upload/images/20240920/20121052xjeVT3wLyb.png

QA工程師當然部會只有這麼簡單的測試
通常為了保證產品品質
都會嚴密的測試
並且作了許多的unit test來測試程式是否有問題

如果這個環節過了之後
我們就可以把步驟往後上架摟~

Step 6. 部屬

雖然我們這隻程式不會教大家怎麼進行部屬
不過可以告訴大家
通常在開發完畢後~

我們可以使用
1.本機執行(程式碼在當前的機器上運行)
2.包裝成執行檔給同事執行
3.寫成網頁應用程式
4.寫成APP上架到google store/apple store
5.透過CI/CD pipeline 到server 自動部屬

大概有這些類別去應用
不過每個環節其實都是很大一門學問

如果大家有興趣可以去隔壁棚的k8s/軟體工程...等 學習各路大神的心法

總結

今天除了複習昨天的作業外
也提供滿滿的心路歷程
也給大家不同的思考觀點來設計
讓大家了解到軟體工程開發的步驟

這邊我也幫大家總結一些,流程控制時要注意的優缺點:

優點 (Benefits) 缺點 (Drawbacks)
增強可讀性:流程控制結構(如 if、for、while 等)使程式更加條理分明,易於理解和維護。 複雜度增加:過多的嵌套或不當使用流程控制可能會導致程式邏輯變得難以維護和理解。
提升效率:能夠根據特定條件或迴圈執行不同的邏輯,避免不必要的計算。 可引入錯誤:錯誤的條件判斷或邏輯可能導致程式執行錯誤或行為異常。
增強靈活性:允許根據不同情況執行不同的程式區段,提高程式的靈活性。 調試困難:嵌套邏輯過於複雜時,可能使調試工作變得困難。
減少重複代碼:流程控制允許集中處理相似的邏輯,減少代碼重複性。 效能問題:如果流程控制使用不當(如過多迴圈或條件檢查),可能影響效能。
提升重用性:常見的控制邏輯可以封裝在函數或模塊中,提高代碼的重用性。 難以測試:複雜的流程控制需要更多的測試,以確保邏輯正確。

整理軟體工程週期的優缺點:

階段 優點 缺點
需求 - 明確定義系統功能,避免錯誤實作 - 增強客戶滿意度 - 需求變更頻繁,可能導致時間和成本增加 - 需求不明確時易出現問題
分析 - 帮助理解技術挑戰和系统可行性 - 為設計提供堅實基礎 - 分析過程可能繁瑣,花費大量時間 - 可能在需求不完善時分析出錯誤
設計 - 提供詳細的技術解決方案 - 提前解決技術問題,減少實作階段的返工 - 設計過程可能過於複雜,耗時 - 設計變更可能帶來巨大成本
實作 - 把設計轉化為可操作的產品 - 開發過程具體,可檢查進度 - 如果需求和設計變更頻繁,實作階段會變得混亂 - 開發過程中容易出現技術債務
測試 - 保证系統符合需求,提升質量 - 提前發現錯誤,避免系統崩潰 - 測試過程可能耗費大量時間和資源 - 測試不足或不夠全面時,可能遺漏重要錯誤
部屬 - 將產品交付使用,實現商業價值 - 可讓用戶提早使用,獲取反饋 - 部屬過程可能遇到環境兼容性問題 - 若無足夠測試,部屬後可能出現重大問題

優點:每個步驟都有助於增強開發流程的透明性和系統性,從需求到部屬,確保軟體品質和用戶滿意度,減少錯誤和風險。
缺點:各階段的過程可能導致時間成本和開發複雜度增加,特別是當需求變更頻繁時,會對後續步驟造成負面影響。

這邊就看大家在每個步驟或週期花費的時間考考量
這個也是很看PM的時間規劃喔~

如果覺得小弟寫得不錯可以給個讚,鼓勵是激勵我往下分享乾貨的最大動力!!


上一篇
[Day4] 程式基礎核心價值 - 流程控制
下一篇
[Day6] 流程控制的另一個好夥伴(迴圈) - 迴圈不會停,電腦又當機
系列文
從概念到應用:Python實戰開發學習之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言